package prtpv;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import org.w3c.dom.Node;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import org.w3c.dom.Document;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;

public class VentaXML implements Venta {

    public String getDia() {
        return (fechaReg.dia);
    }

    public String getHora() {
        return (fechaReg.hora);
    }

    public boolean getEmpleado() {
        return (empleado);
    }

    public boolean getFidelidad() {
        return (fidelidad);
    }

    public class Fecha {

        String dia;
        String hora;

        public Fecha(String dia, String hora) {
            this.dia = dia;
            this.hora = hora;
        }

        @Override
        public String toString() {
            return (dia + " " + hora);
        }
    }
    public Fecha fechaReg = null;
    public boolean fidelidad = false;
    public boolean empleado = false;
    public ArrayList<LinVenta> lineas = new ArrayList<LinVenta>();
    public String origen;
    private int cont;

    public VentaXML(String src) {
        origen = src;
        cont = 0;
    }

    public boolean leeVenta() throws ParserConfigurationException, SAXException, IOException {

        if (origen != null) {
            File archXML = new File(origen);
            Document doc = ((DocumentBuilderFactory.newInstance()).newDocumentBuilder()).parse(archXML);

            NodeList elementos = doc.getDocumentElement().getChildNodes();
            Node nodo;
            String apdo;
            int i = 0;


            for (i = 0; i < elementos.getLength(); i++) {
                nodo = elementos.item(i);
                apdo = nodo.getNodeName();
                if (apdo.equals("fecha")) {
                    fechaReg = new Fecha(limpiaEspacios(nodo.getAttributes().getNamedItem("dia").getNodeValue()),
                            limpiaEspacios(nodo.getAttributes().getNamedItem("hora").getNodeValue()));
                } else if (apdo.equals("deshacerLinVenta")||apdo.equals("deshacerlinventa")) {
                    lineas.add(new LinDeshacer());
                } else if (apdo.equals("cancelarVenta") || apdo.equals("cancelarventa")) {
                    lineas.add(new LinCancelar());
                    return false;
                } else if (apdo.equals("linventa")) {
                    
                    lineas.add(new LinProducto(limpiaEspacios(nodo.getAttributes().getNamedItem("codProd").getNodeValue()),
                            (Integer.parseInt(limpiaEspacios(nodo.getAttributes().getNamedItem("cant").getNodeValue())))));
                } else if (apdo.equals("cliente")) {
                    empleado = Boolean.parseBoolean(limpiaEspacios(nodo.getAttributes().getNamedItem("empleado").getNodeValue()));
                    fidelidad = Boolean.parseBoolean(limpiaEspacios(nodo.getAttributes().getNamedItem("tarjetaFid").getNodeValue()));
                }
            }

            return true;
        } else {
            return false;
        }
    }

    public void cancelaVenta() {
        lineas.clear();
        origen = "";
    }

    public LinVenta pasaLinVenta() {
        if (cont < lineas.size()) {
            return (lineas.get(cont++));
        } else {
            return null;
        }
    }

    @Override
    public String toString() {

        String retorno = "";
        if (lineas.size() > 0) {
            retorno += "Venta " + fechaReg + "\n";
            LinVenta l = pasaLinVenta();
            while (l != null) {
                retorno += l.toString() + "\n";
                l = pasaLinVenta();
            }
            if (empleado) {
                retorno += "esEmpleado ";
            } else {
                retorno += "NOesEmpleado ";
            }
            if (fidelidad) {
                retorno += "CONtarjetaFidelidad\n";
            } else {
                retorno += "SINtarjetaFidelidad\n";
            }
        }
        return (retorno);
    }

    String limpiaEspacios(String fuente){
        String retorno="";
        for(int i=0;i< fuente.length();i++){
            if(fuente.charAt(i)!=' '){
                retorno += fuente.charAt(i);
            }
        }
        return retorno;
    }

}
